package com.specter.dev.docs.execute;

import java.util.List;

import com.specter.dev.docs.builder.GenConfiguration.JApiInput;

import lombok.Data;

/**
 * 通过配置获取实体对象
 * 
 * @author Liang.Wang
 * @since 2020-03-09
 * @version V1.0
 */
public interface JApiInputExe {

	/**
	 * 配置的实体信息
	 * 
	 * @param input 配置信息
	 * 
	 * @return 转换目标实体列表
	 */
	public List<?> input(JApiInput input);

	@Data
	public class Controller {
		private String note;// 对应类的@apiNote
		private String desc;// 对应类的注释
		private String uri;// 对应类的注解路径 多个用;进行分割

		private String since;// 类的注释 @since
		private String author;// 类的注释 @author
		private String version;// 类的注释 @version

		private ControllerMapping[] mappings;
	}

	@Data
	public class ControllerMapping {
		private String note;// 对应方法的 @apiNote 注释
		private String desc;// 对应方法的注释

		private String uri;// 对应方法 @RequestMapping 注解路径
		private String method;// @RequestMapping 中方法 GET/POST
		private String consumes;// @RequestMapping 中 Request中的Content-Type
		private String produces;// @RequestMapping 中 Response中的Accept

		private String params;// @RequestMapping 配置参数
		private String headers;// @RequestMapping 头部参数

		private String paramNote;// 对应方法的 @param 的注释
		private ControllerEntity[] paramEntities;// 请求参数列表
		private String request;// 示例代码

		private String returnNote;// 对应返回的注释 @return
		private ControllerEntity[] returnEntities;// 返回结果列表
		private String response;// 示例代码
	}

	@Data
	public class ControllerEntity {
		private String name;// 参数名
		private String type;// number/string/boolean/array/map/object
		private String desc;// description
		private boolean required;// 是否必须

		private int level;//对象所在的层级，从0开始
		private String mainClass;// 容器类名，如 Response
		private String dataClass;// 数据类名，如 Response中的data具体值
	}

}
